﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using vudu.Datos.SqlServer;
using vudu.ClasesDominio;
using vudu.Datos.Fachada;
using vudu.Datos.SqlServer;

namespace vudu.Logica.Clases
{
    public class ControladorHorarioDeClase
    { 
        #region Atributos
        private DateTime _horaInicio;
        private DateTime _horaFin;
        private String _dia;
        private int _idHorarioClase;
        private Salon _salonDeClase;
        private DateTime _fechaHorario;
        private SqlServerPractica _sql = new SqlServerPractica(); 

        #endregion

        #region Constructor

        public ControladorHorarioDeClase(int idHorarioClase,DateTime horaInicio, DateTime horaFin, string dia,Salon salonDeClase,DateTime fechaHorario)
        {

            _idHorarioClase = idHorarioClase;
            _horaInicio = horaInicio;
            _horaFin = horaFin;
            _dia = dia;
            _salonDeClase = salonDeClase;
            _fechaHorario = fechaHorario;

        }

        public ControladorHorarioDeClase()
        {
            SalonDeClase = new Salon();
        }

     

        #endregion

        #region Gets y Sets

        
        public DateTime HoraInicio
        {
            get { return _horaInicio; }
            set { _horaInicio = value; }
        }

        

        public int IdHorarioClase
        {
            get { return _idHorarioClase; }
            set { _idHorarioClase = value; }
        }

        public DateTime HoraFin
        {
            get { return _horaFin; }
            set { _horaFin = value; }
        }

        public string Dia
        {
            get { return _dia; }
            set { _dia = value; }
        }
        
        public Salon SalonDeClase
        {
            get { return _salonDeClase; }
            set { _salonDeClase = value; }
        }

        public DateTime FechaHorario
        {
            get { return _fechaHorario; }
            set { _fechaHorario = value; }
        }


        #endregion

        #region Metodos de Manejo

        private bool ValidarDatos()
        {
            return true;
        }

        /*private bool AgregarSalon(Salon:Salon)
        {
            return true;
        }*/

        private bool MostrarInfoSalon()
        {
            return true;
        }

        public Salon AgregarSalon(String nombreSalon)
        {
            return null;
        }
        
        
        /*public Salon LiberarSalon(Horario horarioclase)
        {
            throw new NotImplementedException();
        }*/
        /*
        public Salon ConsultarSalon(int numeropractica)
        {
            throw new NotImplementedException();
        }*/
        /*
       public Salon BuscarSalon(int numeropractica)
        {
           throw new NotImplementedException();
        }*/
        //Da una lista de salones disponibles para hacer la practica
        /*
        public List<Salon> SalonesDisponibles( int horaInicioP, int horaFinP ,String diaP,int idEscuela)
        {

            List<HorarioDeClase> listaHorario = new List<HorarioDeClase>();
            listaHorario = CargarHorario(diaP);
            
            List<Salon> listaSalonesTotal = new List<Salon>();
            listaSalonesTotal = _sql.ConsultarSalones(idEscuela);
            List<Salon> listaSalonesDisponibles = new List<Salon>();
            List<Salon> listaSalonesNoDisponibles = listaSalonesOcupados(horaInicioP, horaFinP, listaHorario);
            return CompararSalones(listaSalonesNoDisponibles, listaSalonesTotal);

           
        }


        public List <HorarioDeClase> CargarHorario(String dia)
    {
        List<HorarioDeClase> listaHorario = new List<HorarioDeClase>();
        listaHorario = _sql.ConsultarHorario(dia);
        for (int i = 0; i < listaHorario.Count; i++) // 
        {
            listaHorario[i].SalonDeClase = _sql.ConsultarSalonIndividual(listaHorario[i].SalonDeClase.NumeroSalon);
        }
        return listaHorario;
    }
        */
        // compara salones total y salones no disponibles
        public List<Salon> CompararSalones(List<Salon> salonNoDisponible, List<Salon> salonesTotal)
        {
            List < Salon > salonesDisponibles= new List<Salon>();
            
            for (int i = 0; i < salonesTotal.Count; i++) // 
            {
                int salonesDiferentes = 0;
                for (int j = 0; j < salonNoDisponible.Count; j++) // 
                {
                    if (salonesTotal[i].NumeroSalon != salonNoDisponible[j].NumeroSalon)
                    {
                        salonesDiferentes = salonesDiferentes + 1;
                    }
                 }
                if (salonesDiferentes == salonNoDisponible.Count)
                {
                    salonesDisponibles.Add(salonesTotal[i]);
                }
                
            }
            return salonesDisponibles;

        }
        //obtengo lo salones ocupados en un horario especifico
        public List<Salon> listaSalonesOcupados(int horaInicioP, int horaFinP, List<HorarioDeClase> listaHorario)
        {
            List<Salon> listaSalonesNoDisponibles = new List<Salon>();
            for (int i = 0; i < listaHorario.Count; i++) // 
            {
                if (listaHorario[i].HoraInicio.Hour == horaInicioP || (horaInicioP > listaHorario[i].HoraInicio.Hour && horaInicioP < listaHorario[i].HoraFin.Hour))
                {
                    listaSalonesNoDisponibles.Add(listaHorario[i].SalonDeClase);
                }
            }
            return listaSalonesNoDisponibles;
        }
        //Crear horario
        public void crearHorario()
        {
        }

        #endregion

        #region Metodo Grupo 9 VU_ConsultarHorariosdeMateriaImprimir
       
        public List<SeccionMateria> ConsultarMateriaEstudiante(int idUsuario)
        {
            return new EnlaceDatos().ConsultarSeccionesEstudiante(idUsuario);
        }

        public List<HorarioDeClase> ConsultarHorarioMateriaEstudiante(SeccionMateria seccion)
        {
            return new EnlaceDatos().ConsultarHorarioSeccionEstudiante(seccion);
        }
        #endregion
    }
}
